웹개발 및 최신 테크 소식을 전하는 블로그, 웹이즈프리

HOME > sql

[MySQL] 필드에서 특정문자 포함 또는 제외한 DB 검색, LIKE ,NOT

Last Modified : 2017-12-11 / Created : 2014-01-28
175,243
View Count

MySQL 뿐만 아니라 다른 쿼리 언어에서도 가장 많이 사용되는 것이 아마 데이터 조회에 사용되는 select문일 것입니다.. 이 select문을 가장 많이 사용되면서 간단하지만 반대로 가장 어려울 수도 있는 부분입니다.

데이터베이스에 존재하는 데이터 중에서 원하는 정보만 찾아오려면 select문과 함께 사용되는 다양한 키워드에 익숙해져야합니다. 이 들 중에서 많이 사용되는 것은 where, and, or, between 그리고 like 등등이 있습니다. 그 외에 기호도 사용되죠. || ,  % 등등... 아래에는 많이 사용되는 이 키워드와 기호를 정리해보고자 합니다.

아래의 예제들은 이 다양한 방법을 사용하여 테이블안에 있는 필드에서 원하는 값만 찾는 방법들입니다. like, not을 이용한 방법외에도 여러가지를 함께 정리하였으니 아래 예제를 참고해 쿼리문을 짜시는데 도움이 되면 좋겠습니다. 



# select 사용 예제코드와 함께 알아보기

가장 많이 사용되는 것들을 예제를 통해 알아보도록 하겠습니다. 그럼 아래를 봐주세요.

! 일치하는 텍스트를 가진 row를 불러오는 방법

테이블의 컬럼에서 일치하는 값의 행을 반환합니다.
SELECT * FROM tablename WHERE who="me";
// who 필드에서 "me"와 일치하는 값을 가진 데이터를 검색

앞 또는 뒤의 문자열을 무시할 경우.. 즉 일부만 같아도 찾는 방법은 다음과 같습니다.
SELECT * FROM tablename WHERE who LIKE "%me%";
// who 필드에서 me를 포함하는 값을 가진 데이터 검색

아래의 %기호를 사용하면 앞 또는 뒤에 있는 값들은 무시하고 검색합니다. 위 방법은 앞, 뒤 둘다 무시하고 찾았지만 앞만.. 또는 뒤만 따로 적용할 수 있습니다. 아래 예제를 봐주세요.


! 앞에만 또는 뒤에만 무시하고 일치하는 텍스트 검색 방법

앞만 무시하거나 뒤만 무시하는 쿼리입니다.
SELECT * FROM tablename WHERE who LIKE "%me"; ㅣ
// 앞에 문자에 상관없이 me를 가진 텍스트 검색

SELECT * FROM tablename WHERE who LIKE "me%"; // 뒤에 문자에 상관없이 me를 가진 텍스트 검색


! 특정 키워드가 없는 데이터를 조회할 경우

아래에는 지금까지와 반대로 없는 값... 반대인 경우를 검색하는 방법입니다. me가 포함되지 않은 텍스트를 검색하는 방법입니다.
SELECT * FROM tablename WHERE NOT who="me";
// who 필드에 "me"가 없는 데이터를 조회


! 여러개의 검색 조건이 필요한 경우

조건이 다수인 경우 AND 또는 OR를 사용하여 여러가지 조건에 일치하는 검색을 수행합니다.
SELECT * FROM tablename WHERE filed1 LIKE "%me%" AND filed2 LIKE "%you%";
// filed1과 filed2에 각각 me, you가 존재하는 값을 검색


! 복수개의 검색어를 하나의 컬럼에 적용하는 방법

만약 특정 필드 안에 존재하는 텍스트를 찾되 하나가 아닌 둘... 즉 me, you가 포함된 경우를 찾으려면? %를 여러개 사용하는 방법이 있습니다.
SELECT * FROM TABLE WHERE FIELD1 LIKE ’%me%you%’;
// 간단하면서 매우 유용하게 사용 가능. 특히 복수개의 인덱스 검색시 더욱 필요


이 예제는 검색어가 여러가진 경우 일치하는 데이터를 찾는데 사용할 수 있습니다. 검색창에 스페이스를 구분자로 여러개의 텍스트를 찾을때 스페이스를 %로 바꿔주기만 하면 바로 적용이 가능한 방법입니다.


여기까지 가장 많이 사용되는 예제들을 다루어보았습니다. 이 외에도 다양한 예들이 존재하는데요 ~ 아래는 그 외의 예제들 중 일부입니다.


! 둘 중 하나만 해당하여도 되는 OR 조건의 쿼리문

하나만 만족하여도 되는 OR조건의 쿼리문입니다.
SELECT * FROM tablename WHERE who LIKE "%me%" OR who LIKE "%you%";
// OR은 AND와 달리 A 또는 B와 같이 둘 중 하나만 만족해도 데이터를 불러옴

아래는 NOT을 사용하여 반대되는 경우 ~ 즉 포함되지 않는 경우를 찾습니다.
SELECT * FROM tablename WHERE who LIKE "%me%" OR NOT who LIKE "%you%";
// 뒤에 NOT이 들어가는 경우 필드 앞에 써야함


조건이 여러개인 경우 그룹으로 묶을 필요가 있습니다. 아래 예제는 소괄호를 사용하여 그룹화 하였습니다.
SELECT * FROM tablename WHERE who=test AND (who LIKE "%me%" OR NOT who LIKE "%you%");
// 위와 같이 괄호를 묶어서 그룹으로 지정이 가능




# 부등호를 사용하는 숫자, 날짜 쿼리문 예제보기

아래 예제는 부등호를 사용하여 적용한 쿼리입니다.

! 부등호를 사용하여 검색하는 쿼리문 작성하기부등호를 사용하는 경우는 대부분 숫자 또는 날짜를 기준으로 조회하는 경우입니다. 이 역시 매우 자주 사용됩니다.
SELECT * FROM tablename WHERE who < 100 AND who > 10;
// 숫자 데이터의 경우 부등호의 사용이 가능

SELECT * FROM tablename WHERE who < 100 AND who > 10 ORDER BY DATE;
// DATE란 필드를 기준으로 정렬을 요청함

SELECT * FROM tablename WHERE who < 100 AND who > 10 ORDER BY DATE DESC;
// DESC 옵션은 내림차순

참고로 DESC의 기본값은 오름차순입니다. 그럼 조회와 관련된 더 많은 예제를 계속 업데이트 하도록 하겠습니다.

Previous

[SQL] 해시 함수로의 변환, SHA(), SHA1()

Previous

[SQL] 복수개의 필드로 정렬하기, 다수의 필드로 정렬